const uniID = require('uni-id')
module.exports = (options) => {
	// 初始化 uniID 配置
	if (options) {
		uniID.init(options)
	}
	// 返回中间件函数
	return async function auth(app, next) {
		// 校验 token		
		const auth = await app.uniID.checkToken(app.request.uniIdToken(), {
			needPermission: true,
			needUserInfo: false
		})
		if (auth.code) {
			// 校验失败，抛出错误信息
			app.throw(`TOKEN_INVALID：${auth.message}`, null, `${auth.code}`)
		}
		app.auth = auth // 设置当前请求的 auth 对象		
		await next() // 执行后续中间件
		const {
			token,
			tokenExpired
		} = auth		
		if (token && tokenExpired) {
			app.request.token(token);
			app.request.tokenExpired(tokenExpired);
		}
	}
}
